#!/bin/bash
# 生产环境模块管理脚本
# 用法: ./scripts/manage-production-modules.sh [list|add|remove|enable|disable] [module-path]
# 
# 示例:
#   ./scripts/manage-production-modules.sh list                    # 列出所有模块状态
#   ./scripts/manage-production-modules.sh add reports            # 添加报表管理到生产环境
#   ./scripts/manage-production-modules.sh remove reports          # 从生产环境移除报表管理
#   ./scripts/manage-production-modules.sh enable reports          # 启用报表管理（同 add）
#   ./scripts/manage-production-modules.sh disable reports         # 禁用报表管理（同 remove）

CONFIG_FILE="frontend/src/config/production-modules.js"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
CONFIG_PATH="$PROJECT_ROOT/$CONFIG_FILE"

# 所有可用的模块路径
ALL_MODULES=(
  'flink-cluster'
  'jobs'
  'logs'
  'tools'
  'kafka-topic-monitor'
  'starrocks-tables'
  'alerts'
  'savepoints'
  'jars'
  'third-party-config'
  'starrocks-cluster-monitor'
  'reports'
  'dev-template'
)

# 颜色定义
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 检查配置文件是否存在
if [ ! -f "$CONFIG_PATH" ]; then
    echo -e "${RED}错误: 配置文件不存在: $CONFIG_PATH${NC}"
    exit 1
fi

# 获取当前生产环境模块列表
get_production_modules() {
    grep -E "^\s*'[^']+'," "$CONFIG_PATH" | sed "s/.*'\([^']*\)'.*/\1/" | grep -v "^$"
}

# 检查模块是否在生产环境列表中
is_in_production() {
    local module=$1
    get_production_modules | grep -q "^${module}$"
}

# 列出所有模块状态
list_modules() {
    echo -e "${BLUE}========================================${NC}"
    echo -e "${BLUE}生产环境模块配置状态${NC}"
    echo -e "${BLUE}========================================${NC}"
    echo ""
    
    local production_modules=($(get_production_modules))
    
    echo -e "${GREEN}✓ 生产环境模块 (${#production_modules[@]}):${NC}"
    for module in "${production_modules[@]}"; do
        echo -e "  ${GREEN}✓${NC} $module"
    done
    echo ""
    
    echo -e "${YELLOW}○ 仅开发环境模块:${NC}"
    for module in "${ALL_MODULES[@]}"; do
        if ! is_in_production "$module"; then
            echo -e "  ${YELLOW}○${NC} $module"
        fi
    done
    echo ""
    
    echo -e "${BLUE}说明:${NC}"
    echo "  - ${GREEN}✓${NC} 标记的模块会在生产环境和开发环境都显示"
    echo "  - ${YELLOW}○${NC} 标记的模块只在开发环境显示"
}

# 添加模块到生产环境
add_module() {
    local module=$1
    
    if [ -z "$module" ]; then
        echo -e "${RED}错误: 请指定模块路径${NC}"
        echo "用法: $0 add <module-path>"
        echo "可用模块: ${ALL_MODULES[*]}"
        exit 1
    fi
    
    # 检查模块是否有效
    if [[ ! " ${ALL_MODULES[@]} " =~ " ${module} " ]]; then
        echo -e "${RED}错误: 无效的模块路径 '$module'${NC}"
        echo "可用模块: ${ALL_MODULES[*]}"
        exit 1
    fi
    
    if is_in_production "$module"; then
        echo -e "${YELLOW}模块 '$module' 已经在生产环境列表中${NC}"
        return 0
    fi
    
    # 找到注释行之前的位置，添加新模块
    # 在最后一个模块之后添加
    local last_module_line=$(grep -n "^\s*'[^']*'," "$CONFIG_PATH" | tail -1 | cut -d: -f1)
    
    if [ -n "$last_module_line" ]; then
        # 在最后一行模块后添加新模块
        sed -i.bak "${last_module_line}a\\
  '${module}',  // $(date +%Y-%m-%d) 添加到生产环境" "$CONFIG_PATH"
    else
        # 如果没有现有模块，在数组开始后添加
        sed -i.bak "/export const productionModules = \[/a\\
  '${module}',  // $(date +%Y-%m-%d) 添加到生产环境" "$CONFIG_PATH"
    fi
    
    # 清理备份文件
    rm -f "${CONFIG_PATH}.bak"
    
    echo -e "${GREEN}✓ 已添加模块 '$module' 到生产环境${NC}"
}

# 从生产环境移除模块
remove_module() {
    local module=$1
    
    if [ -z "$module" ]; then
        echo -e "${RED}错误: 请指定模块路径${NC}"
        echo "用法: $0 remove <module-path>"
        exit 1
    fi
    
    if ! is_in_production "$module"; then
        echo -e "${YELLOW}模块 '$module' 不在生产环境列表中${NC}"
        return 0
    fi
    
    # 删除包含该模块的行
    sed -i.bak "/^\s*'${module}',/d" "$CONFIG_PATH"
    
    # 清理备份文件
    rm -f "${CONFIG_PATH}.bak"
    
    echo -e "${GREEN}✓ 已从生产环境移除模块 '$module'${NC}"
}

# 主函数
main() {
    local action=$1
    local module=$2
    
    case "$action" in
        list)
            list_modules
            ;;
        add|enable)
            add_module "$module"
            list_modules
            ;;
        remove|disable)
            remove_module "$module"
            list_modules
            ;;
        *)
            echo -e "${BLUE}生产环境模块管理脚本${NC}"
            echo ""
            echo "用法: $0 [list|add|remove|enable|disable] [module-path]"
            echo ""
            echo "命令:"
            echo "  list                    - 列出所有模块状态"
            echo "  add <module-path>       - 添加模块到生产环境"
            echo "  remove <module-path>    - 从生产环境移除模块"
            echo "  enable <module-path>    - 启用模块（同 add）"
            echo "  disable <module-path>   - 禁用模块（同 remove）"
            echo ""
            echo "示例:"
            echo "  $0 list"
            echo "  $0 add reports"
            echo "  $0 remove reports"
            echo ""
            echo "可用模块:"
            for m in "${ALL_MODULES[@]}"; do
                echo "  - $m"
            done
            exit 1
            ;;
    esac
}

main "$@"

